661588b8565223497eaf005260420ea7c1728fa5,src/main/java/rx/schedulers/JavaFxScheduler.java,InnerPlatformScheduler,schedule,#Action0#number#TimeUnit#,72
Before Change
@Override
public Subscription schedule(final Action0 action, long delayTime, TimeUnit unit) {
long delay = Math.max(0, unit.toMillis(delayTime));
assertThatTheDelayIsValidForTheSwingTimer(delay);
class DualAction implements ActionListener, Subscription, Runnable {
private Timer timer;
final SerialSubscription subs = new SerialSubscription();
boolean nonDelayed;
private void setTimer(Timer timer) {
this.timer = timer;
}
@Override
public void actionPerformed(ActionEvent e) {
run();
}
@Override
public void run() {
if (nonDelayed) {
try {
if (tracking.isUnsubscribed() || isUnsubscribed()) {
return;
}
action.call();
} finally {
subs.unsubscribe();
}
} else {
timer.stop();
timer = null;
nonDelayed = true;
trampoline(this);
}
}
@Override
public boolean isUnsubscribed() {
return subs.isUnsubscribed();
}
@Override
public void unsubscribe() {
subs.unsubscribe();
}
public void set(Subscription s) {
subs.set(s);
}
}
final DualAction executeOnce = new DualAction();
tracking.add(executeOnce);
final Timer timer = new Timer((int) delay, executeOnce);
executeOnce.setTimer(timer);
timer.start();
After Change
@Override
public Subscription schedule(final Action0 action, long delayTime, TimeUnit unit) {
long delay = unit.toMillis(delayTime);
assertThatTheDelayIsValidForTheJavaFxTimer(delay);
class DualAction implements EventHandler<ActionEvent>, Subscription, Runnable {
private Timeline timeline;
final SerialSubscription subs = new SerialSubscription();
boolean nonDelayed;
private void setTimer(Timeline timeline) {
this.timeline = timeline;
}
@Override
public void handle(ActionEvent event) {
run();
}
@Override
public void run() {
if (nonDelayed) {
try {
if (tracking.isUnsubscribed() || isUnsubscribed()) {
return;
}
action.call();
} finally {
subs.unsubscribe();
}
} else {
timeline.stop();
timeline = null;
nonDelayed = true;
trampoline(this);
}
}
@Override
public boolean isUnsubscribed() {
return subs.isUnsubscribed();
}
@Override
public void unsubscribe() {
subs.unsubscribe();
}
public void set(Subscription s) {
subs.set(s);
}
}
final DualAction executeOnce = new DualAction();
tracking.add(executeOnce);
//final Timeline timer = new Timeline((int) delay, executeOnce);
final Timeline timer = new Timeline(new KeyFrame(Duration.millis(delay)));
executeOnce.setTimer(timer);
timer.play();